JDBC (Java Database Connectivity)-এ ResultSet হল একটি অবজেক্ট যা SQL কুয়েরি চালানোর মাধ্যমে ডেটাবেস থেকে রিটার্ন হওয়া ডেটাকে ধারণ করে। Scrollable এবং Updatable ResultSet হল দুটি গুরুত্বপূর্ণ ফিচার যা আপনাকে ডেটাবেস থেকে প্রাপ্ত ডেটাকে স্ক্রোল বা আপডেট করতে সাহায্য করে।
1. Scrollable ResultSet
Scrollable ResultSet এর মাধ্যমে আপনি রিটার্ন হওয়া ডেটা সেটের যে কোনো রেকর্ডে যেকোনো অবস্থানে স্ক্রোল করতে পারেন, যেমন প্রথম, শেষ, নির্দিষ্ট ইনডেক্স বা পূর্ববর্তী/পরবর্তী রেকর্ডে যেতে পারেন। সাধারণ forward-only ResultSet ডিফল্টভাবে শুধুমাত্র ডেটা ফেচ করার সময় পরবর্তী রেকর্ডে যেতে পারে, তবে Scrollable ResultSet আপনাকে ডেটা সেটের মধ্যে উল্টোও যেতে দেয়, যেমন previous(), first(), last(), absolute(), এবং relative() মেথড ব্যবহার করে।
Scrollable ResultSet এর সুবিধা:
- Random Access: আপনি ডেটা সেটের মধ্যে যেকোনো অবস্থানে চলে যেতে পারবেন।
- Flexibility: রেকর্ডকে কোনো নির্দিষ্ট অবস্থানে স্ক্রোল করা সম্ভব।
2. Updatable ResultSet
Updatable ResultSet ব্যবহার করে আপনি ডেটাবেসে থাকা ডেটা পরিবর্তন (update), মুছতে (delete), এবং নতুন ডেটা যোগ করতে পারেন। এটি INSERT, UPDATE, এবং DELETE অপারেশনগুলির জন্য খুবই কার্যকরী। এর মাধ্যমে আপনি ডেটাবেসের রেকর্ডগুলি সরাসরি পরিবর্তন করতে পারেন।
Updatable ResultSet এর সুবিধা:
- Direct Update: ডেটা অবজেক্টে ডেটা পরিবর্তন করা যায় এবং তারপর সেই পরিবর্তনগুলি ডেটাবেসে ক্যাপচার করা যায়।
- Efficient Changes: ডেটাবেসের মধ্যে পরিবর্তন খুব দ্রুত হয় এবং অ্যাপ্লিকেশন কোডে কেবল ResultSet.updateXXX() ব্যবহার করতে হয়।
Scrollable এবং Updatable ResultSet ব্যবহার করার জন্য ধাপ:
- Scrollable ResultSet তৈরির জন্য
ResultSet.TYPE_SCROLL_INSENSITIVEবাResultSet.TYPE_SCROLL_SENSITIVEব্যবহার করা হয়। - Updatable ResultSet তৈরির জন্য
ResultSet.CONCUR_UPDATABLEব্যবহার করা হয়।
Scrollable এবং Updatable ResultSet তৈরি করা:
import java.sql.*;
public class ScrollableAndUpdatableResultSetExample {
public static void main(String[] args) {
Connection connection = null;
Statement stmt = null;
ResultSet rs = null;
try {
// ডেটাবেসের সাথে সংযোগ স্থাপন
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "root", "password");
// Statement তৈরি করা এবং Scrollable, Updatable ResultSet তৈরি করা
String query = "SELECT id, name, department FROM employees";
stmt = connection.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE, // Scrollable ResultSet
ResultSet.CONCUR_UPDATABLE // Updatable ResultSet
);
// কুয়েরি চালানো
rs = stmt.executeQuery(query);
// স্ক্রোলিং এবং ডেটা আপডেটের জন্য ResultSet ব্যবহার করা
// প্রথম রেকর্ডে যেতে
if (rs.first()) {
System.out.println("First Record:");
System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name") + ", Department: " + rs.getString("department"));
}
// পরবর্তী রেকর্ডে যেতে
if (rs.next()) {
System.out.println("Next Record:");
System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name") + ", Department: " + rs.getString("department"));
}
// প্রথম রেকর্ডে ফিরে আসা
if (rs.previous()) {
System.out.println("Previous Record (back to First):");
System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name") + ", Department: " + rs.getString("department"));
}
// রেকর্ড আপডেট করা (যেমন নাম পরিবর্তন করা)
if (rs.absolute(2)) { // দ্বিতীয় রেকর্ডে গিয়ে আপডেট করা
rs.updateString("name", "Updated Name");
rs.updateRow(); // আপডেট করা
System.out.println("Updated Record:");
System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name") + ", Department: " + rs.getString("department"));
}
// নতুন রেকর্ড যোগ করা
rs.moveToInsertRow(); // Insert Row এ যাওয়া
rs.updateInt("id", 4); // নতুন id
rs.updateString("name", "New Employee");
rs.updateString("department", "Marketing");
rs.insertRow(); // নতুন রেকর্ড ইনসার্ট করা
System.out.println("Inserted New Record Successfully!");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (connection != null) connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
কোড ব্যাখ্যা:
- Scrollable and Updatable ResultSet তৈরি করা:
connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE)দ্বারা স্ক্রলেবল এবং আপডেটেবল রেজাল্টসেট তৈরি করা হয়।TYPE_SCROLL_INSENSITIVE: এটি একটি স্ক্রলেবল রেজাল্টসেট তৈরি করে যা ডেটা সেভ বা পরিবর্তিত হলে সেগুলোর পরিবর্তন রিফ্লেক্ট করে না।CONCUR_UPDATABLE: এটি আপডেটেবল রেজাল্টসেট তৈরি করে, যার মাধ্যমে আপনি রেকর্ড পরিবর্তন করতে পারবেন।
- ResultSet স্ক্রোলিং:
rs.first(): প্রথম রেকর্ডে যাওয়ার জন্য ব্যবহার করা হয়।rs.next(): পরবর্তী রেকর্ডে যাওয়ার জন্য ব্যবহার করা হয়।rs.previous(): পূর্ববর্তী রেকর্ডে যাওয়ার জন্য ব্যবহার করা হয়।rs.absolute(n): নির্দিষ্ট রেকর্ডে যেতে ব্যবহৃত হয়।
- ResultSet আপডেট:
rs.updateString("name", "Updated Name"): নামের কলাম আপডেট করা হয়।rs.updateRow(): আপডেটের পর সেই রেকর্ডটি ডেটাবেসে আপডেট করা হয়।rs.moveToInsertRow(): নতুন রেকর্ড ইনসার্ট করার জন্য এটি ব্যবহার করা হয়।rs.insertRow(): নতুন রেকর্ড ইনসার্ট করা হয়।
Scrollable এবং Updatable ResultSet এর সুবিধা
- Scrollable ResultSet:
- Random Access: আপনি ডেটা সেটের মধ্যে যেকোনো অবস্থানে চলে যেতে পারেন।
- Flexibility: স্ক্রোলিং অপশন যেমন প্রথমে যাওয়া, শেষতে যাওয়া, পূর্ববর্তী বা পরবর্তী রেকর্ডে যাওয়া, যা ডেটা নিয়ে আরও কার্যকরী কাজ করতে সক্ষম।
- Updatable ResultSet:
- Direct Data Modification: ডেটাবেসে সরাসরি পরিবর্তন করতে পারবেন।
- Insert, Update, Delete Operations: আপনি INSERT, UPDATE, এবং DELETE কুয়েরি এক্সিকিউট করতে পারেন, যা খুবই সহজ।
সারাংশ
Scrollable এবং Updatable ResultSet হল JDBC এর শক্তিশালী ফিচার যা আপনাকে ডেটাবেসের মধ্যে রেকর্ড স্ক্রোল বা পরিবর্তন করার সুযোগ দেয়। Scrollable ResultSet ডেটাবেসের ডেটা সেটের মধ্যে স্ক্রোল করার জন্য ব্যবহার করা হয়, এবং Updatable ResultSet ডেটাবেসের ডেটাতে পরিবর্তন (INSERT, UPDATE, DELETE) করার জন্য ব্যবহৃত হয়। এগুলি ResultSet এর সাধারণ ব্যবহারের চেয়ে আরও উন্নত এবং কার্যকরী পদ্ধতি সরবরাহ করে, যা ডেটাবেস পরিচালনা ও বিশ্লেষণে সহায়ক।
Read more